#include <stdio.h>

int n,m1[30],m2[30],m3[30],result[18],count=0;

void stv(int x,int y,int k)
{
    result[x]=y;
    m1[y]=k;
    m2[x+y]=k;
    m3[x-y+n]=k;
}
void dfs(int step)
{
    if (step>n)
    {
        count++;
        if (count<=3)
        {
            for (int i=1;i<=n;i++)
            {
                printf("%d ",result[i]);
            }
            printf("\n");
        }
        return;
    }
    for (int j=1;j<=n;j++)
    {
        if (m1[j]||m2[step+j]||m3[step-j+n])
        {
            continue;
        }
        stv(step,j,1);
        dfs(step+1);
        stv(step,j,0);
    }
}
int main()
{
    scanf("%d",&n);
    dfs(1);
    printf("%d",count);
    return 0;
}
